package com.deep.transaction.demo5.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;

/*
事务工具类

存在问题：当业务层中的有较多的功能需要进行事务管理,那么就会重复大量的去写事务管理代码
解决办法：将事务管理代码制作成通知类
 */
//@Component
public class MyTransactionManager {
    //事务管理器
    @Autowired
    private DataSourceTransactionManager transactionManager;

    //事务属性
    @Autowired
    @Qualifier("definition")
    private TransactionDefinition definition;

    /*
    开启事务
     */
    public TransactionStatus openTransaction() {
        return transactionManager.getTransaction(definition);
    }

    /*
    提交事务
     */
    public void commit(TransactionStatus status) {
        transactionManager.commit(status);
    }

    /*
    回滚事务
     */
    public void rollback(TransactionStatus status) {
        transactionManager.rollback(status);
    }
}
